//
//  HomeViewController.swift
//  上海微博
//
//  Created by co on 16/2/23.
//  Copyright © 2016年 王南侠. All rights reserved.
//

import UIKit
import YYModel
import AFNetworking
import SVProgressHUD

//微博 cell 可重用标识符号
private let CZStatusCelID = "CZStatusCellID"
private let CZStatusTipCellID = "CZStatusTipCellID"

class HomeViewController: RootViewController {

    override func viewDidLoad() {
        
        //设置刷新控件
        setupRefreshContrl()
        
        //调用RootViewController 的ViewDidLoad函数 ,会直接调用 loadData
        super.viewDidLoad()
        
        prepareTableView()
        
        // 设置访客视图信息
        // 如果用户登录为空那么后面的什么也不做
        visitorView?.setupInfo(message: "关注一些人，回这里看看有什么惊喜")
        
        // 注册网络连接监听
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChaned", name: AFNetworkingReachabilityDidChangeNotification, object: nil)
    }
    
    
    deinit {
        // 注销通知 - 在控制器被销毁执行。目前的程序,会在应用程序销毁时候销毁，可以不写。
        // 但是从代码逻辑和习惯上，建议保留
        // 在注销通知的时候。如果指定名称。可以注销名称对应的通知。否则，会注销所有的通知
        NSNotificationCenter.defaultCenter().removeObserver(self, name: AFNetworkingReachabilityDidChangeNotification, object: nil)
        
    }
    
    /// 准备表格视图
    private func prepareTableView(){
        
        //注册可用cell
        tableView?.registerClass(StatusCell.self, forCellReuseIdentifier: CZStatusCelID)
        tableView?.registerClass(StatusTipCell.self, forCellReuseIdentifier: CZStatusTipCellID)
        
        // 取消分割线
        tableView?.separatorStyle = .None
    }

    //接收到内存警告
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

        //  在IOS 6.0之后，默认不在清除 view .在ios 6.0之前，收到内存警告
        //  ‘如果当前视图没有显示’，会被从内存中销毁 下次需要用的时候，会子调用 loadView 创建 view
        //  只需要释放能够被再次创建的资源，例如 从网络家族的数据数组
        
        // 如何判断视图有没有显示
        print("Home 的 window \(self.view.window)")
        
        //  如果视图显示器正在显示,window 不为nil
        //  商业应用中这个方法一定要写
        //  注意 swift 中lazy 不可以释放
        if self.view.window == nil {
        
            // 1.清理数组

            // 2.刷新数据
            loadData()
            
        }
    }
    
    
    /// 网络连接状态监听方法
    @objc private func reachabilityChaned(){

        // 刷新表格的第一个分组
        self.tableView?.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Automatic)
    }
    
    /// 加载数据方法
    override func loadData() {
        
        //1.判断是上拉刷新，如果是上拉刷新动画启动，认为是上拉刷新
        let isPullip = refreshControl?.isPullupRefresh ?? false
        
        // 显示刷新控件
        refreshControl?.beginRefreshing()
        
        // 加载数据
        listViewModle.loadDataStatus(isPullip) { (isSuccessed) -> () in
            
            print("加载数据完成")
            //  结束刷新
            self.refreshControl?.endRefreshing()
            
            // 判断网络请求是否成功
            if !isSuccessed {
                SVProgressHUD.showInfoWithStatus("网络出错啦，不给力(*^__^*) 嘻嘻……")
                
                return
            }
            
            //刷新数据
            self.tableView?.reloadData()
            
        }
    }
    // MARK: - 私有属性
    // 微博列表视图模型
        private lazy var listViewModle = StatusListViewModle()
}


// MARK: - UITableViewDataSource
// Redundant conformance of 'HomeViewController' to protocol 'UITableViewDataSource
//如果父类已经遵守协议.子类不用再次遵守协议 否则会报 重复遵守协议错误
extension HomeViewController {
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }
    //重写数据源方法
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        // 分组 0 对应提示的 cell.如果要提示，才返回 1
        if section == 0 {
            return NetworkTools.sharedTools.reachebe ? 0 :1
            
        }
        
        return listViewModle.statusList.count;
        
    }
    
    override  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        // 分组0 对应的是cell 
        if indexPath.section == 0 {
        return tableView.dequeueReusableCellWithIdentifier(CZStatusTipCellID, forIndexPath: indexPath)
            
        }
        
        let cell = tableView.dequeueReusableCellWithIdentifier(CZStatusCelID, forIndexPath: indexPath) as! StatusCell
        
        // 设置视图模型
        cell.viewModle = listViewModle.statusList[indexPath.row]
        return cell
        
    }
    
/// 返回行高属性
        func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
            
            // 分组 0 返回默认行高
            if  indexPath.section == 0 {
                return 44
            }
            
            // 返回视图模型的行高属性
        return listViewModle.statusList[indexPath.row].rowHight
    }
    
}

